package ar.edu.utn.frba.dds.aterrizar.aerolineas;

import static org.mockito.Mockito.mock;

import java.util.ArrayList;
import java.util.List;

import ar.edu.utn.frba.dds.aterrizar.busquedas.Vuelo;
import ar.edu.utn.frba.dds.aterrizar.usuarios.Usuario;

import com.oceanic.AerolineaOceanic;
import com.oceanic.AsientoDTO;

public class AerolineaOceanicAdapter extends AerolineasInterface {

	private static final AerolineaOceanicAdapter INSTANCE = new AerolineaOceanicAdapter();

	private static AerolineaOceanic thisAerolinea;

	public static AerolineaOceanicAdapter getInstance() {
		thisAerolinea = mock(AerolineaOceanic.class).getInstance();
		return INSTANCE;
	}
	
	public String quienSoy(){
		return "Oceanic";
	}

	@Override
	public void comprarElVuelo(Vuelo vuelo, Usuario usuario){
		if(!thisAerolinea.comprarSiHayDisponibilidad(vuelo.getDNIcomprador(), vuelo.getCodigoDeVuelo(), Integer.parseInt(vuelo.getCodigoDeAsiento())))
			System.out.println("No hay disponibilidad o el asiento ya fue reservado.");
	}

	@Override
	public void reservarElVuelo(Vuelo vuelo, Usuario usuario){
		if(!thisAerolinea.reservar(vuelo.getDNIcomprador(), vuelo.getCodigoDeVuelo(), Integer.parseInt(vuelo.getCodigoDeAsiento())))
			System.out.println("No se pudo reservar.");
	}

	@Override
	public ArrayList<Vuelo> getAsientosTotales() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ArrayList<Vuelo> getAsientosBuscados(String origen, String destino,
			String fechaSalida, String horaSalida, String fechaLlegada,
			String horaLlegada) {
		List<AsientoDTO> asientosAFiltrar = thisAerolinea.asientosDisponiblesParaOrigenYDestino(origen, destino, fechaSalida);
		ArrayList<Vuelo> asientosFiltrados = new ArrayList<Vuelo>();
		for(AsientoDTO asientoDTO : asientosAFiltrar){
			asientosFiltrados.add(convertirAsientoAVuelo(asientoDTO));
		}		
		return asientosFiltrados;
	}

	@Override
	public ArrayList<Vuelo> getAsientosBuscadosIncluyendoReservados(
			String origen, String destino, String fechaSalida,
			String horaSalida, String fechaLlegada, String horaLlegada) {
		// TODO Auto-generated method stub
		return null;
	}

	public Vuelo crearVuelo(Object vuelo) {
		// TODO Auto-generated method stub
		return null;
	}

	protected Vuelo convertirAsientoAVuelo(AsientoDTO asiento){
		Vuelo vuelo = new Vuelo(asiento.getCodigoDeVuelo(), Integer.toString(asiento.getNumeroDeAsiento()), asiento.getPrecio().toString(), asiento.getClase(),
				asiento.getUbicacion(), asiento.getReservado().toString(), "", asiento.getHoraDeSalida(), asiento.getHoraDeLlegada(), asiento.getOrigen(), asiento.getDestino(),
				asiento.getFechaDeSalida(), asiento.getFechaDeLlegada(), this);
		return vuelo;
	}
}


